package com.imy.common.util;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.PreferenceManager;
import android.text.TextUtils;

import com.imy.common.CommonLib;


/**
 * SharedPreferences封装工具类
 */
public class SPUtil {
    private static Context context = CommonLib.mContext;
    private static SharedPreferences sp = null;
    private static Editor editor = null;
    static {
        sp = context.getSharedPreferences("Lua_script",
                Context.MODE_PRIVATE);
        editor = sp.edit();
    }

    /**
     * 初始化SharedPreferences
     *
     * @param spName
     * @return
     */
    private static SharedPreferences initSP(String spName) {
        SharedPreferences sp;
        if (TextUtils.isEmpty(spName)) {
            sp = PreferenceManager.getDefaultSharedPreferences(context);
        } else {
            sp = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
        }
        return sp;
    }

    /**
     * 清除默认的SharedPreferences
     */
    public static void clearPreference() {
        Editor editor = sp.edit();
        editor.clear();
        editor.commit();
    }

    /**
     * 清除指定的SharedPreferences
     *
     * @param spName
     */
    public static void clearPreference(String spName) {
        SharedPreferences sp = initSP(spName);
        Editor editor = sp.edit();
        editor.clear();
        editor.commit();
    }

    /**
     * 清除指定的SharedPreferences的指定key
     *
     * @param spName
     * @param key
     */
    public static void removeKey(String spName, String key) {
        SharedPreferences sp = initSP(spName);
        Editor editor = sp.edit();
        editor.remove(key);
        editor.commit();
    }

    /**
     * 清除默认SharedPreferences的指定key
     *
     * @param
     * @param key
     */
    public static void removeKey(String key) {
        editor.remove(key);
        editor.commit();
    }

    /**
     * 获取默认SharedPreferences的String数据
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public static String getString(String key, String defaultValue) {
        return sp.getString(key, defaultValue);
    }

    /**
     * 获取指定SharedPreferences的String数据
     *
     * @param spName
     * @param key
     * @param defaultValue
     * @return
     */
    public static String getString(String spName, String key,
                                   String defaultValue) {
        return initSP(spName).getString(key, defaultValue);
    }

    /**
     * 将String数据存储在默认的SharedPreferences
     *
     * @param key
     * @param value
     */
    public static void setString(String key, String value) {
        editor.putString(key, value).commit();
    }

    /**
     * 将String数据存储在指定的SharedPreferences
     *
     * @param spName
     * @param key
     * @param value
     */
    public static void setString(String spName, String key, String value) {
        initSP(spName).edit().putString(key, value).commit();
    }

    /**
     * 获取默认SharedPreferences的Boolean值
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public static boolean getBoolean(String key, boolean defaultValue) {
        return sp.getBoolean(key, defaultValue);
    }

    /**
     * 获取指定SharedPreferences的Boolean值
     *
     * @param spName
     * @param key
     * @param defaultValue
     * @return
     */
    public static boolean getBoolean(String spName, String key,
                                     boolean defaultValue) {
        return initSP(spName).getBoolean(key, defaultValue);
    }

    /**
     * 判断默认的SharedPreferences中是否包含某值
     *
     * @param key
     * @return
     */
    public static boolean hasContainKey(String key) {
        return sp.contains(key);
    }

    /**
     * 判断指定的SharedPreferences中是否包含某值
     *
     * @param spName
     * @param key
     * @return
     */
    public static boolean hasContainKey(String spName, String key) {
        return initSP(spName).contains(key);
    }

    /**
     * 将Boolean的值保存在默认的SharedPreferences中
     *
     * @param key
     * @param value
     */
    public static void setBoolean(String key, boolean value) {
        editor.putBoolean(key, value).commit();
    }

    /**
     * 将Boolean的值保存在指定的SharedPreferences中
     *
     * @param spName
     * @param key
     * @param value
     */
    public static void setBoolean(String spName, String key, boolean value) {
        initSP(spName).edit().putBoolean(key, value).commit();
    }

    /**
     * 将int值保存在默认的SharedPreferences中
     *
     * @param key
     * @param value
     */
    public static void setInt(String key, int value) {
        editor.putInt(key, value).commit();
    }

    /**
     * 将int值保存在指定的SharedPreferences中
     *
     * @param spName
     * @param key
     * @param value
     */
    public static void setInt(String spName, String key, int value) {
        initSP(spName).edit().putInt(key, value).commit();
    }

    /**
     * 从默认的SharedPreferences中获取int值
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public static int getInt(String key, int defaultValue) {
        return sp.getInt(key, defaultValue);
    }

    /**
     * 从指定的SharedPreferences中获取int值
     *
     * @param spName
     * @param key
     * @param defaultValue
     * @return
     */
    public static int getInt(String spName, String key, int defaultValue) {
        return initSP(spName).getInt(key, defaultValue);
    }

    /**
     * 将float值保存在默认的SharedPreferences中
     *
     * @param key
     * @param value
     */
    public static void setFloat(String key, float value) {
        editor.putFloat(key, value).commit();
    }

    /**
     * 将float值保存在指定的SharedPreferences中
     *
     * @param spName
     * @param key
     * @param value
     */
    public static void setFloat(String spName, String key, float value) {
        initSP(spName).edit().putFloat(key, value).commit();
    }

    /**
     * 从默认的SharedPreferences中获取long值
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public static float getFloat(String key, float defaultValue) {
        return sp.getFloat(key, defaultValue);
    }

    /**
     * 从指定的SharedPreferences中获取float值
     *
     * @param spName
     * @param key
     * @param defaultValue
     * @return
     */
    public static float getFloat(String spName, String key, float defaultValue) {
        return initSP(spName).getFloat(key, defaultValue);
    }

    /**
     * 将long值保存在默认的SharedPreferences中
     *
     * @param key
     * @param value
     */
    public static void setLong(String key, long value) {
        sp.edit().putLong(key, value).commit();
    }

    /**
     * 将long值保存在指定的SharedPreferences中
     *
     * @param spName
     * @param key
     * @param value
     */
    public static void setLong(String spName, String key, long value) {
        initSP(spName).edit().putLong(key, value).commit();
    }

    /**
     * 从默认的SharedPreferences中获取long值
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public static long getLong(String key, long defaultValue) {
        return sp.getLong(key, defaultValue);
    }

    /**
     * 从指定的SharedPreferences中获取long值
     *
     * @param spName
     * @param key
     * @param defaultValue
     * @return
     */
    public static long getLong(String spName, String key, long defaultValue) {
        return initSP(spName).getLong(key, defaultValue);
    }
}